function ajax(options) {
    // 存储的是默认值
    var defaults = {
        type: 'get',
        url: '',
        async: true,
        data: {},
        header: {
            'Content-Type': 'application/x-www-form-urlencoded'
        },
        success: function() {},
        error: function() {}
    };


    Object.assign(defaults, options);

    /* ---------------------拼接请求参数start------------------------- */
    // 拼接请求参数的变量
    var params = '';
    // 循环用户传递进来的对象格式参数
    for (var attr in defaults.data) {
        // 将参数转换为字符串格式
        params += attr + '=' + defaults.data[attr] + '&';
    };
    // 将参数最后的&符截取掉，将截取后的值重新赋值给params变量
    params = params.substr(0, params.length - 1);
    /* --------------------拼接请求参数end----------------------------- */

    // 如果请求方式为get 就将请求参数拼接在请求地址后面
    if (defaults.type == 'get') {
        defaults.url = `${defaults.url}?${params}`;
    }

    /* -------------------ajax对象start------------------------------ */
    // 创建ajax对象
    var xhr = new XMLHttpRequest();
    // 配置ajax对象
    xhr.open(defaults.type, defaults.url);

    // 如果请求方式为post 设置请求数据格式的类型 并将参数放入send方法中
    if (defaults.type == 'post') {
        // 用户希望向服务器端传递的请求参数类型
        var contnetType = defaults.header['Content-Type'];
        // 设置请求数据格式的类型
        xhr.setRequestHeader('Content-Type', contnetType);
        // 如果类型为json
        if (contnetType == 'application/json') {
            // 向服务器端传递json数据格式的参数
            xhr.send(JSON.stringify(defaults.data));
        } else {
            // 向服务器端传递普通类型的请求参数
            xhr.send(params);
        }

    } else {
        // 发送请求
        xhr.send();
    }

    // 监听onload事件 当xhr对象接收完响应数据后触发
    xhr.onload = function() {

        // xhr.getResponseHeader() 获取响应头中的数据 
        var contentType = xhr.getResponseHeader('Content-Type');
        // 服务器端返回的数据
        var responseText = xhr.responseText;
        // 如果响应类型中包含application/json
        if (contentType.includes('application/json')) {
            // 将json字符串转换为json对象
            responseText = JSON.parse(responseText);
        }

        // 当http状态码等于200的时候
        if (xhr.status == 200) {
            // 请求成功 调用处理成功情况的函数
            defaults.success(responseText, xhr);
        } else {
            // 请求失败 调用处理失败情况的函数
            defaults.error(responseText, xhr);
        }

    };
    // 当网络中断时
    xhr.onerror = function() {
        // 调用失败回调函数并且将xhr对象传递给回调函数
        defaults.error(xhr);
    };
    /* ---------------------ajax对象end------------------------- */
};